جزوه · چالش پنجم فصل چهارم · مفهوم Inode و Links ← بازگشت به فهرست
📘 چالش پنجم فصل چهارم مفهوم Inode و Links
📅 تاریخ: چهارشنبه، ۲۸ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی)
🔍 قبل از شروع، یه مثال ساده:

فرض کن داری به یه ساختمون نگاه می‌کنی. Inode مثل شماره پلاک خونه‌ست (هر خونه یه شماره منحصربه‌فرد داره). Links تعداد درهای ورودی به اون خونه‌ست. برای یه فایل معمولی، هر اسم یا لینک یه در ورودی حساب میشه. ولی برای یه دایرکتوری، تعداد لینک‌ها یعنی تعداد راه‌های ورودی که شامل خودش، والدش و همه زیرشاخه‌هاست. این چالش دقیقاً همینه: چرا یه دایرکتوری خالی ۵ تا لینک داره؟

▍ مقدمه

در این چالش، با مفهوم Inode و Links (تعداد لینک‌ها) در لینوکس آشنا می‌شوید. این مفاهیم برای درک عمیق‌تر سیستم فایل بسیار مهم هستند. با استفاده از دستور stat، اطلاعات دقیق یک فایل یا دایرکتوری را مشاهده می‌کنیم.

📌 تعریف Inode:

Inode (مخفف Index Node) یک ساختار داده در سیستم فایل است که همه اطلاعات مربوط به یک فایل (به جز نام آن) را ذخیره می‌کند. هر فایل یک Inode منحصربه‌فرد دارد.

Links تعداد نام‌هایی است که به یک Inode اشاره می‌کنند. برای دایرکتوری‌ها، این عدد شامل . (خود دایرکتوری)، .. (دایرکتوری والد) و زیردایرکتوری‌ها است.

▍ بررسی چالش از روی تصویر

• ساختار دایرکتوری work

work/ ├── F1/ │ ├── temp1/ │ └── temp2/ └── F2/ ├── temp3/ └── temp4/

توضیح: دایرکتوری work دارای دو زیرشاخه F1 و F2 است. هر کدام از اینها نیز زیرشاخه‌های خود را دارند.

• خروجی stat work

File: work Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 806h/2054d Inode: 11278129 Links: 5 Access: (0775/drwxrwxr-x) Uid: (1000/ abedini) Gid: (1000/ abedini) Access: 2024-05-11 16:49:26.730869735 +0330 Modify: 2024-05-11 16:49:23.594865783 +0330 Change: 2024-05-11 16:49:23.594865783 +0300 Birth: 2024-05-11 16:49:23.594865783 +0330

توضیح: خروجی stat نشان می‌دهد که Links: 5 است. سؤال اصلی این است: چرا تعداد لینک‌ها ۵ است در حالی که هیچ فایلی زیر work لینک نشده است؟

▍ پاسخ چالش

تعداد لینک‌های یک دایرکتوری به این صورت محاسبه می‌شود:

🧮 فرمول تعداد لینک‌های دایرکتوری:

تعداد لینک‌ها = 2 + تعداد زیرشاخه‌های مستقیم

  • ۲ → یکی برای خود دایرکتوری (.) و یکی برای دایرکتوری والد (..)
  • تعداد زیرشاخه‌های مستقیم → هر زیرشاخه یک ورودی .. به دایرکتوری والد اضافه می‌کند.

در دایرکتوری work، سه زیرشاخه مستقیم وجود دارد:

اما در ساختار بالا، work فقط دو زیرشاخه دارد (F1 و F2). پس چرا Links=5 است؟

⚠️ توجه:

در تصویر اولیه، tree work نشان داد که work سه زیرشاخه دارد: F1، F2 و F3. اما در تصویر دوم فقط دو تا نشان داده شده است.

پس Links=5 به این معنی است که work دقیقاً ۳ زیرشاخه مستقیم دارد:

  • خود دایرکتوری (.) ← ۱ لینک
  • دایرکتوری والد (..) ← ۱ لینک
  • زیرشاخه‌ها ← هر کدام ۱ لینک

مجموع = ۱ + ۱ + ۳ = ۵

📝 مثال دیگر:

اگر دایرکتوری test را با mkdir test بسازید (بدون زیرشاخه)، تعداد لینک‌های آن ۲ خواهد بود:

  • یک لینک برای خود دایرکتوری (.)
  • یک لینک برای دایرکتوری والد (..)

اگر یک زیرشاخه به نام dir1 در آن بسازید، تعداد لینک‌ها به ۳ افزایش می‌یابد.

▍ دستورات مفید برای بررسی

• مشاهده Inode و Links یک فایل یا دایرکتوری

┌──(ya3in㉿kali)-[~] └─$ stat work

• مشاهده Inode با ls -li

┌──(ya3in㉿kali)-[~] └─$ ls -li work/ 11278129 drwxrwxr-x 5 abedini abedini 4096 May 11 16:49 work

توضیح: ستون اول (11278129) Inode و ستون دوم تعداد لینک‌ها (5) را نشان می‌دهد.

🧪 چالش شما:

یک دایرکتوری با نام test_links بسازید. سپس داخل آن سه زیرشاخه ایجاد کنید. با stat تعداد لینک‌ها را بررسی کنید.

دستورات خود را بنویسید:

mkdir test_links
stat test_links
✅ پاسخ چالش:
┌──(ya3in㉿kali)-[~] └─$ mkdir -p test_links/{dir1,dir2,dir3} └─$ stat test_links File: test_links
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: ... Inode: ... Links: 5
...

توضیح: تعداد لینک‌ها ۵ است: ۱ (خود دایرکتوری) + ۱ (والد) + ۳ (زیرشاخه‌ها) = ۵

📌 جمع‌بندی:
  • Inode: شناسه منحصربه‌فرد هر فایل یا دایرکتوری.
  • Links: تعداد نام‌هایی که به یک Inode اشاره می‌کنند.
  • برای فایل‌ها: تعداد لینک‌ها = تعداد Hard Linkها (معمولاً ۱).
  • برای دایرکتوری‌ها: تعداد لینک‌ها = ۲ + تعداد زیرشاخه‌های مستقیم.
  • دستور stat: برای مشاهده اطلاعات کامل یک فایل یا دایرکتوری.
  • دستور ls -li: نمایش Inode و تعداد لینک‌ها.